class Faq < ApplicationRecord
  # 使用 has_neighbors 插件，用于管理与其他记录的关系
  has_neighbors :embedding

  # 在保存记录之前触发的回调，用于创建或更改嵌入信息
  before_save :create_or_change_embedding

  # 调用星火大模型的嵌入 API 来获取输入的嵌入信息
  #
  # 参数：
  # - input: 输入的文本信息
  #
  # 返回值：
  # - 成功时，返回嵌入信息的 JSON 数据
  # - 失败时，返回错误信息
  def self.fetch_embedding(input)
    url = 'https://api.listenai.com/v1/embedding'
    response = HTTPX
                 .plugin(:auth)
                 .bearer_auth(ENV['XINGHUO_API_KEY'])
                 .post(url, json: { input: input })
    case response
    in { status: 200, body: body }
      JSON.parse(body)['data']
    in {error: error}
      error
    end
  end

  # 创建或更改嵌入信息的方法，根据问题或答案的更改来更新嵌入信息
  def create_or_change_embedding
    if self.embedding.nil? or self.question_changed? or self.answer_changed?
      embedding = "Q: #{self.question}\nA: #{self.answer}"
      self.embedding = self.class.fetch_embedding(embedding)
    end
  end

end